


FUNCTION Benveniste() implements the Benveniste's variable step size CLMS algorithm
Based on the book of A. Benveniste, M. Metivier and P. Priouret, Adaptive Algorithms and Stochastic Approximation, New York: Spinger-Verlag, 1990
INPUT:
x: input signal which should be scaled according to the dynamic range of nonlinearity
N: filter length
mu: step-size
rho: step-size of adaptation of mu
OUTPUT:
y: filter output
Complex Valued Nonlinear Adaptive Filtering toolbox for MATLAB
Supplementary to the book:
"Complex Valued Nonlinear Adaptive Filters: Noncircularity, Widely Linear and Neural Models"
by Danilo P. Mandic and Vanessa Su Lee Goh
(c) Copyright Danilo P. Mandic 2009
http://www.commsp.ee.ic.ac.uk/~mandic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You can obtain a copy of the GNU General Public License from
http://www.gnu.org/copyleft/gpl.html or by writing to
Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
...........................................

0001 % FUNCTION Benveniste() implements the Benveniste's variable step size CLMS algorithm 0002 % 0003 % Based on the book of A. Benveniste, M. Metivier and P. Priouret, Adaptive Algorithms and Stochastic Approximation, New York: Spinger-Verlag, 1990 0004 % 0005 % INPUT: 0006 % x: input signal which should be scaled according to the dynamic range of nonlinearity 0007 % N: filter length 0008 % mu: step-size 0009 % rho: step-size of adaptation of mu 0010 % 0011 % OUTPUT: 0012 % y: filter output 0013 % 0014 % 0015 % Complex Valued Nonlinear Adaptive Filtering toolbox for MATLAB 0016 % Supplementary to the book: 0017 % 0018 % "Complex Valued Nonlinear Adaptive Filters: Noncircularity, Widely Linear and Neural Models" 0019 % by Danilo P. Mandic and Vanessa Su Lee Goh 0020 % 0021 % (c) Copyright Danilo P. Mandic 2009 0022 % http://www.commsp.ee.ic.ac.uk/~mandic 0023 % 0024 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0025 % This program is free software; you can redistribute it and/or modify 0026 % it under the terms of the GNU General Public License as published by 0027 % the Free Software Foundation; either version 2 of the License, or 0028 % (at your option) any later version. 0029 % 0030 % This program is distributed in the hope that it will be useful, 0031 % but WITHOUT ANY WARRANTY; without even the implied warranty of 0032 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0033 % GNU General Public License for more details. 0034 % 0035 % You can obtain a copy of the GNU General Public License from 0036 % http://www.gnu.org/copyleft/gpl.html or by writing to 0037 % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. 0038 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0039 % ........................................... 0040 function y = Benveniste(x,N,mu,rho) 0041 0042 M = 1;% prediction horizon 0043 L = length(x)-M; % length of simulation 0044 filterinput = zeros(N,L);%input of FIR 0045 filteroutput = zeros(1,L);%output of FIR 0046 learning = zeros(1,L);% the adaptive learning rate; 0047 Phi = zeros(N,1); 0048 WVSLMS = zeros(N,1);% weight 0049 eVSLMS = zeros(1,L);% error 0050 EVSLMS = zeros(1,L);% mean square error 0051 filteroutput = zeros(1,L);% output 0052 0053 0054 for i = 1:L 0055 for m = 1:N 0056 if (i-m+1)>0 0057 filterinput(m,i) = x(1,i-m+1); 0058 else 0059 filterinput(m,i) = 0; 0060 end 0061 end 0062 0063 filteroutput(i) = transpose(filterinput(:,i)) * WVSLMS;% 0064 eVSLMS(i) = x(i+M) - filteroutput(i);% 0065 EVSLMS(i) = 10 * log10(1/2 * eVSLMS(i)' * eVSLMS(i)); 0066 if i == 1 0067 learning(1) = mu; 0068 Phi = zeros(N,1); 0069 else 0070 Phi = (eye(N,N) - learning(i-1) * conj(filterinput(:,i-1)) * transpose(filterinput(:,i-1))) * Phi + ... 0071 eVSLMS(i-1) * conj(filterinput(:,i-1)); 0072 learning(i) = learning(i-1) + rho * real(eVSLMS(i) * filterinput(:,i)'* conj(Phi)); 0073 end 0074 WVSLMS = WVSLMS + learning(i) * eVSLMS(i) * conj(filterinput(:,i)); 0075 end 0076 y = filteroutput; 0077 0078 0079